In [1]:
import pandas as pd
import csv
board_games = pd.read_csv("board_games.csv")
print(board_games.head(3))
In [2]:
board_games.shape
Out[2]:
In [3]:
board_games = board_games.dropna(axis=0)
In [4]:
board_games.shape
Out[4]:
In [5]:
board_games = board_games[board_games['users_rated'] > 0]
In [6]:
board_games.shape
Out[6]:
Escogiendo el Error metrico¶
- El error métrico es de suma importancia ya que este nos va a decir si el modelo elegido es adecuado o no, imagenemos que obtenemos un error metrico el cual es igual a la desviación estandar de nuestros datos, eso querra decir que no estamos eligiendo un buen modelo y debemos de cambiarlo, pues deberiamos buscar siempre modelos que nos den un error por debajo de la desviacion estandar y lo mas bajo posible.
In [7]:
import matplotlib.pyplot as plt
%matplotlib inline
plt.hist(board_games['average_rating'])
plt.show()
In [8]:
plt.boxplot(board_games['average_rating'])
plt.show()
In [9]:
print(board_games['average_rating'].std())
print(board_games['average_rating'].mean())
- Para este caso, en principio elegiremos “Mean Square Error” ya que al ser nuestros datos continuos tiene sentido elegir este error.
- Es importante tener en cuenta que “Mean square error” no es la unica posibilidad que tenemos, puesto que se trata un modelo de Regresion Lineal y queremos medir la distancia entre el valor real y el predecido, podemos usar “mean square” y “la mediana del error medio”
- Definitivamente no podemos usar, AUC “Area bajo la curva” o cualquier otro error de clasificacion ya que este lo usariamos en un problema de clasificacion binaria y este no es el caso.
In [10]:
from sklearn.cluster import KMeans
import numpy as np
kmeans = KMeans(n_clusters = 5)
numeric_columns = board_games.iloc[:, 3:]
print(numeric_columns.head(3))
In [11]:
kmeans.fit(numeric_columns)
Out[11]:
In [12]:
labels = kmeans.labels_
print(labels)
In [13]:
game_mean = numeric_columns.apply(np.mean, axis = 1)
game_mean.head()
Out[13]:
In [14]:
game_std = numeric_columns.apply(np.std, axis = 1)
plt.scatter(x=game_mean, y=game_std, c=game_std)
plt.show()
Encontrando Correlaciones.¶
La correlación es la forma numérica en la que la estadística ha podido evaluar la relación de dos o más variables, es decir, mide la dependencia de una variable con respecto de otra variable independiente.
In [15]:
correlations = numeric_columns.corr()
correlations['average_rating']
Out[15]:
- Podemos ver como “average_weight” esta altamente correlacionado con “average_rating”, tambien “yearpublished” presenta una buena correlacion lo cual nos da una idea de que los juegos nuevos obtienen mejores ratings. Otro ejemplo es “minage” cuanto mas alto tiene mejor rating.
- Otro insigth que podemos obtener de la correlacion es, ¿Que columnas no estan correlacionadas entre si y por tanto podemos eliminar? En este caso ‘bayes_average_rating’, ‘average_rating’ pueden ser eliminadas.
In [16]:
cols_dont_corr = list(numeric_columns.columns)
cols_dont_corr.remove('bayes_average_rating')
cols_dont_corr.remove('average_rating')
# This columns are eliminated because seems that they do not correlate with average_rating
corr_cols = cols_dont_corr
Creando un Modelo.¶
- Vamos a crear un Modelo de Regresion linean y hagamos algunos prediciones sobre los datos dados.
In [17]:
from sklearn.linear_model import LinearRegression
lr = LinearRegression()
lr.fit(board_games[corr_cols], board_games['average_rating'])
predictions = lr.predict(board_games[corr_cols])
mse = np.mean((predictions - board_games['average_rating']) ** 2)
In [18]:
print(mse)
- Nuestro Error aqui podemos ver que es muy similar a nuestra desviacion estandar, esto quiere decir como ya adelantamos que deberiamos de escoger otro modelo pues este no nos esta dando nueva informacion, o aportando valor a las predicciones.
In [ ]: